package guoanmaker.operator.business.service;

import java.util.List;
import java.util.Map;

import guoanmaker.operator.business.model.OperatorLuckdraw;
import guoanmaker.operator.business.model.ReturnResult;
import guoanmaker.operator.business.modelnobind.OperatorActiveTaskVO;
import guoanmaker.operator.business.modelnobind.OperatorEventDetailsOptions;

/**
 * 
 * @author ws
 * @date 2017-11-23
 */
public interface OperatorActiveTaskServiceInterface {

	/**
	 * @description: 从表t_operator_event_details中根据luck_name and activity_type_id  and availability查询记录
	 * @param availability
	 * @param activityTypeId
	 * @param luckName
	 * @return id, eventTitle两个字段组成的类型的List集合
	 */
	List<OperatorEventDetailsOptions> findOperatorEventDetailsByAvailabilityAndActivityTypeIdAndLuckName(String availability, String activityTypeId, String luckName);

	/**
	 * @description:新增或修改任务记录
	 * @param taskId 任务id
	 * @param taskName 任务名称
	 * @param taskTypeId 任务类型id
	 * @param taskAmount 订单金额
	 * @param activeId 活动id
	 * @return ReturnResult
	 */
	ReturnResult saveOrUpdateOperatorActiveTask(String taskId, String taskName, String taskTypeId, String taskAmount, String activeId);

	/**
	 * @description:根据任务id删除任务记录
	 * @param taskId 任务id
	 * @return void 代表受影响行数
	 */
	void deleteOperatorActiveTaskById(String taskId);
	
	/**
	 * @descrption:根据活动名称和活动类型分页查询
	 * @param taskName 任务名称
	 * @param taskTypeId 任务类型id
	 * @param page 当前页
	 * @param size 当前页显示记录的数量
	 * @return
	 */
	Map<String, Object> findByTaskNameAndTaskType(String taskName, String taskTypeId, String page, String size);
	
	/**
	 * @description:根据订单中的实付金额-优惠金额和任务类型id查询对应的活动url,并添加或修改t_operator_active_chance
	 * @param provideOrderFormId 订单id
	 * @param taskTypeId 任务类型id
	 * @return String url地址
	 */
	String findActiveURLByTruePriceAndTaskTypeId(String provideOrderFormId, String taskTypeId);
	
	/**
	 * 
	 * @param userId 用户ID
	 * @param taskTypeId  任务类型ID。根据任务类型查询对应活动ID
	 * @return 抽奖页面的url以及用户剩余抽奖次数
	 */
	Map<String, String> findActiveURL(String userId, String taskTypeId);
	
	/**
	 * 被邀请人注册成功后，增加邀请人和被邀请人的抽奖次数
	 * @param inviterId 邀请人的用户ID。可为空
	 * @param inviteeId 被邀请人的用户ID。不可为空
	 * @param taskTypeId 任务类型ID。根据任务类型查询对应活动ID
	 * @return (state, error/success) (msg, *)
	 */
	Map<String, String> modifyActiveChance(String inviterId, String inviteeId, String taskTypeId);
	
	/**
	 * 减少该用户在该活动下的一次抽奖次数
	 * @param userId 用户ID
	 * @param activeId 活动ID
	 * @return
	 */
	Map<String, String> minusActiveChance(String userId, String activeId);
	
	/**
	 * 查询此任务类型对应的活动的中奖纪录
	 * @param taskTypeId 任务类型ID。根据任务类型ID查询对应活动ID
	 * @return (state, error/success) (content, List)
	 */
	Map<String, Object> findLuckdrawRecord(String taskTypeId);
	
	/**
	 * 查询此任务类型对应的活动ID
	 * @param taskTypeId
	 * @return
	 */
	Map<String, String> findActiveId(String taskTypeId);
	
	/**
	 * 查询该用户的所有地址信息
	 * @param userId 用户ID
	 * @return (state, error/success) (msg, 提示信息) (content, list)
	 */
	Map<String, Object> findPersonalAddress(String userId);
	
	/**
	 * 根据活动 用户 id查询奖项信息 及剩余次数
	 * @param: id 活动ID
	 * @param: userId 用户ID
	 * @return
	 */
	OperatorLuckdraw getLuckdrawListByActivityId(String id,String userId);
}
